//备注：拷贝代码请加上作者信息
//作者：王海涛
//邮箱：1126471088@qq.com
//版本：V1.0.0
/********************************************************
    说明：
    1、基于非RTOS的时间片任务调度器系统。
    2、默认时间片任务系统支持8个任务。
    3、WHT_SysTick_ms可由用户重定义，由用户更新WHT_SysTick_ms对应的系统时间。
    4、WHT_Idle_Task可由用户实现空闲时执行的内容，建议执行时间要小。
    5、任务安装后需要用户设置执行周期并启动任务。
    6、最后需要循环执行loop函数。
**********************************************************/

#ifndef __TIME_SLICE_TASK_OS_H__
#define __TIME_SLICE_TASK_OS_H__


/* 检测编译器类型 */
#ifndef __weak
    #ifdef __GNUC__
        /* GCC 系列编译器（包括 ARM GCC、MinGW 等） */
        #define __weak   __attribute__((weak))
    #elif defined(__CC_ARM)
        /* Keil MDK 编译器 从 Keil MDK v5.25 开始，默认切换到 ARMClang 编译器（兼容 Clang） */
        #define __weak   __attribute__((weak))
    #elif defined(__ICCARM__)
        /* IAR 编译器 */
        #define __weak   __attribute__((weak))
    #else
        /* 默认情况（未知编译器） */
        #warning "Unknown compiler: __WEAK macro may not work!"
        #define __weak   /* 空定义，可能导致编译错误 */
    #endif
#endif


#define WHT_Time_Slice_Task_Count    8         //时间片系统任务个数

typedef void (*WHT_Task_Function_t)(void);     //任务句柄

typedef struct
{
    int (*install)(WHT_Task_Function_t task);
    int (*remove)(WHT_Task_Function_t task);
    int (*set_cycle)(WHT_Task_Function_t task, unsigned int ms);
    int (*start)(WHT_Task_Function_t task);
    int (*stop)(WHT_Task_Function_t task);
    void (*loop)(void);
}WHT_Time_Slice_Task_OS_t;

extern unsigned int WHT_SysTick_ms;          //实时系统时间
extern void WHT_Idle_Task(void);             //空闲任务
extern const WHT_Time_Slice_Task_OS_t WHT_Time_Slice_Task_OS;


#endif // !__TIME_SLICE_TASK_OS_H__
